﻿/*
 * Copyright (c) 2016 The ZLToolKit project authors. All Rights Reserved.
 *
 * This file is part of ZLToolKit(https://github.com/ZLMediaKit/ZLToolKit).
 *
 * Use of this source code is governed by MIT license that can be found in the
 * LICENSE file in the root of the source tree. All contributing project authors
 * may be found in the AUTHORS file in the root of the source tree.
 */

#include "SelectWrap.h"

using namespace std;

namespace toolkit
{

	FdSet::FdSet()
	{
		_ptr = new fd_set;
	}

	FdSet::~FdSet()
	{
		delete (fd_set*)_ptr;
	}

	void FdSet::fdZero()
	{
		FD_ZERO((fd_set*)_ptr);
	}

	void FdSet::fdClr(int fd)
	{
		FD_CLR(fd, (fd_set*)_ptr);
	}

	void FdSet::fdSet(int fd)
	{
		FD_SET(fd, (fd_set*)_ptr);
	}

	bool FdSet::isSet(int fd)
	{
		return  FD_ISSET(fd, (fd_set*)_ptr);
	}

	int zl_select(int cnt, FdSet* read, FdSet* write, FdSet* err, struct timeval* tv)
	{
		void* rd, * wt, * er;
		rd = read ? read->_ptr : nullptr;
		wt = write ? write->_ptr : nullptr;
		er = err ? err->_ptr : nullptr;
		return ::select(cnt, (fd_set*)rd, (fd_set*)wt, (fd_set*)er, tv);
	}

} /* namespace toolkit */



